import java.util.ArrayList;
import java.util.Random;


public class Forca {
	private ArrayList<String> palavras;
	private int acertos; 
	private int erros;
	private Random rd = new Random();
	private String palavraAtual;
	private String solucaoAtual;
	
	public Forca (){
		palavras = new ArrayList<String>();
		
		this.setPalavras ("laranja");
		this.setPalavras ("banana");
		this.setPalavras ("morango");
		this.setPalavras ("acerola");
		this.setPalavras ("goiaba");
		this.setPalavras ("caju");
		this.setPalavras ("caja");
		this.setPalavras ("manga");
		this.setPalavras ("abacaxi");
		this.setPalavras ("amora");
		this.setPalavras ("lima");
		this.setPalavras ("limao");
		this.setPalavras ("jabuticaba");
		this.setPalavras ("umbu");
		this.setPalavras ("pinha");
		this.setPalavras ("cacau");
		this.setPalavras ("pera");
		this.setPalavras ("maca");
		this.setPalavras ("uva");
		this.setPalavras ("sapoti");
		this.setPalavras ("jambo");
		this.setPalavras ("mamao");
		this.setPalavras ("melao");
		this.setPalavras ("melancia");
		
		this.setAcertos(0);
		this.setErros(0);
		palavraAtual = new String();
		solucaoAtual = new String();
	}
	
	public int getAcertos (){
		return this.acertos;
	}
	
	public int getErros (){
		return this.erros;
	}
	
	public ArrayList<String> getPalavras (){
		return this.palavras;
	}
	
	public String getPalavraAtual (){
		return this.palavraAtual;
	}
	
	public String getSolucaoAtual (){
		return this.solucaoAtual;
	}
	
	public void setAcertos (int acertos){
		this.acertos = acertos;
	}
	
	public void setErros (int erros){
		this.erros = erros;
	}
	
	public void setPalavras (String palavra){
		this.palavras.add(palavra);
	}
	
	public void setPalavraAtual (String palavraAtual){
		this.palavraAtual = palavraAtual;
	}
	
	public void setSolucaoAtual (String solucaoAtual){
		this.solucaoAtual = solucaoAtual;
	}
	
	public void geraPalavra(){
		int indice = rd.nextInt (palavras.size() - 0 + 1) + 0;
		setPalavraAtual(palavras.get(indice));
		
		for (int i = 0; i < getPalavraAtual().length(); i++)
			solucaoAtual += "_";
	}
	
	public void imprimeSolucaoAtual (){
		System.out.println("       ");
		for (int i = 0; i < getSolucaoAtual().length(); i++)			
			System.out.print (getSolucaoAtual().charAt(i) + " ");
	}
	
	public void confereLetra (char letra){
		boolean letraPertence = false;
		ArrayList<Character> tmp = new ArrayList<Character> ();
		
		for (int i = 0; i < getPalavraAtual().length(); i++){
			if (getPalavraAtual().charAt(i) == letra) {
				letraPertence = true;
				acertos++;
				tmp.add(letra);
			}
			else
				tmp.add(getSolucaoAtual().charAt(i));
		}
		
		if (!letraPertence)
			erros++;
		else {
			solucaoAtual = new String();
			for (int i = 0; i < tmp.size(); i++)
				solucaoAtual += tmp.get(i);
		}
	}
	
	public boolean verificaVitoria(){
		if (getAcertos() == getPalavraAtual().length())
			return true;
		return false;
	}
	
	public boolean verificaDerrota(){
		if (getErros() == 6){
			desenhaBoneco();
			return true;
		}
		return false;
	}
	
	public void exibeInterface(){
		for (int i = 0; i < 24; i++)
			System.out.println("");
		System.out.println("------ Jogo da Forca ------");
		desenhaBoneco();
		imprimeSolucaoAtual();
		System.out.println("");
		System.out.println("");
	}
	
	public void desenhaBoneco (){
		if (getErros() == 0) {
			System.out.println("|++++|");
			System.out.println("|    ");
			System.out.println("|");
			System.out.println("|");
			System.out.println("|");	
		}
		if (getErros() == 1){
			System.out.println("|++++|");
			System.out.println("|    O");
			System.out.println("|");
			System.out.println("|");
			System.out.println("|");
		}
		if (getErros() == 2){
			System.out.println("|++++|");
			System.out.println("|    O");
			System.out.println("|    |");
			System.out.println("|    |");
			System.out.println("|");
		}
		if (getErros() == 3){
			System.out.println("|++++|");
			System.out.println("|    O");
			System.out.println("|   /|");
			System.out.println("|    |");
			System.out.println("|");
		}
		if (getErros() == 4){
			System.out.println("|++++|");
			System.out.println("|    O");
			System.out.println("|   /|\\");
			System.out.println("|    |");
			System.out.println("|");
		}
		if (getErros() == 5){
			System.out.println("|++++|");
			System.out.println("|    O");
			System.out.println("|   /|\\");
			System.out.println("|    |");
			System.out.println("|   / ");
		}
		if (getErros() == 6){
			System.out.println("|++++|");
			System.out.println("|    O");
			System.out.println("|   ---");
			System.out.println("|   /|\\");
			System.out.println("|    |");
			System.out.println("|   / \\ ");
		}
	}
}
